Skip to main content

18 HttpDNS

传统 DNS 的问题​

域名缓存问题​

不是每一个请求都会去访问权威 DNS 服务器,而是访问过一次就把结果缓存到自己本地,当再次访问的时候直接就返回这个缓存数据。

域名转发问题​

返回地址不是最近的

出口 NAT 问题​

做了网络地址的转换,权威的 DNS 服务器,就没办法通过这个地址,来判断客户到底是来自哪个运营商。

域名更新问题​

修改权威 DNS,将域名指向新的 IP 地址有延迟。

解析延迟问题​

DNS 的查询过程需要递归遍历多个 DNS 服务器,才能获得最终的解析结果,这会带来一定的时延,甚至会解析超时。

HttpDNS 的工作模式​

不走传统的 DNS 解析,而是自己搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商。当客户端需要 DNS 解析的时候,直接通过 HTTP 协议进行请求这个服务器集群,得到就近的地址。

curl http://106.2.xxx.xxx/d?dn=c.m.163.com
{"dns":[{"host":"c.m.163.com","ips":["223.252.199.12"],"ttl":300,"http2":0}],"client":{"ip":"106.2.81.50","line":269692944}}

HttpDNS 的缓存设计​

分为客户端、缓存、数据源三层

  • 对于应用架构来讲,就是应用、缓存、数据库。常见的是 Tomcat、Redis、MySQL。
  • 对于 HttpDNS 来讲,就是手机客户端、DNS 缓存、HttpDNS 服务器。

HttpDNS 的调度设计​

客户端,可以知道手机的位置,HttpDNS 服务端可以根据这些信息,选择最佳的服务节点访问。

服务端,应用可以通过调用 HttpDNS 的管理接口,配置不同服务质量的优先级、权重。HttpDNS 会根据这些策略综合地理位置和线路状况算出一个排序,优先访问当前那些优质的、时延低的 IP 地址。

加载中...